iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 13
2
DevOps

DevOps with Proxmox系列 第 13

Day 13 - Ansible Playbook

  • 分享至 

  • xImage
  •  

昨天我們看了 Ansible 的 Ad-Hoc 模式,我們今天要來介紹 Playbook

所謂的 Ansible Playbook,是可以把數個步驟集合在一起,在部署時只需要一行指令,便會讀取設定檔裡所包含的指令,然後去執行的工具

而 Playbook 裡有個概念是 role,我們可以在 role 裡設定不同的步驟,讓 Ansible Playbook 在執行時讀取這些步驟,然後對我們的主機進行不同的操作

我們在這裡示範個簡單的 Playbook 範例,我們想要對一臺 Ubuntu 機器進行系統更新,然後安裝 nginx

我們先看資料夾架構

ansible-proxmox/ $ tree
.
├── ansible.cfg
├── inventory
├── roles
│   ├── apt_upgrade
│   │   └── tasks
│   │       └── main.yml
│   └── install_nginx
│       └── tasks
│           └── main.yml
└── webserver.yml

5 directories, 5 files

接下來看檔案內容

  • webserver.yml
---

- hosts: webservers
  roles:
    - apt_upgrade
    - install_nginx
  • roles/apt_upgrade/tasks/main.yml
---

- name: Perform 'apt update' on target
  apt:
    update_cache: yes
  tags:
    - apt

- name: Perform 'apt upgrade' on target
  apt:
    package: '*'
    state: latest
  tags:
    - apt
  • roles/install_nginx/tasks/main.yml
---

- name: Install nginx
  apt:
    package: nginx
    state: present
  tags:
    - install_nginx
  • ansible.cfg
[defaults]
host_key_checking = False

我們可以看到,我們在 webserver.yml 裡定義了我們要對哪些機器進行操作,以及那些機器該具有哪些 role
我們在這裡建立了兩個 role,而 role 需要被放在 roles 的資料夾內,資料夾的名稱就是 role 的名稱
接著,每個 role 裡面可以設定多個 task,而由於我們要執行的步驟較簡易,所以我們只有 main.yml
我們在每個 role 裡記錄了我們要執行哪些步驟,在這裡使用到了 apt 模組

而我們最終執行的指令是 ansible-playbook -i inventory webserver.yml
執行結果大概如下

ansible-playbook_execute_result

可以在裡面看到每個步驟執行的記錄,如果有數台主機的話,每臺主機的狀況都會跟著回報
就這樣,我們可以把很多步驟寫在一起,每次要執行的時候都只要一個步驟就能完成機器環境快速設定了

咦? 你說上面還有 ansible.cfg 沒說明?

ansible.cfg 是 Ansible 的設定檔案,每次在執行 Ansible 的時候都會讀取,而我們在裡面設定的 host_key_checking = False 是什麼呢?

還記得這個提示訊息嗎?

ansible_ssh_prompt

遇到這樣的訊息,每次都得輸入 yes 挺麻煩的對吧? 加入上面那個設定以後, Ansible 在連線時都不會確認要連上的系統的 SSH key,而直接信任對方的 key

雖然這樣很方便,但這同時也提高了安全風險,若系統的 key 被惡意篡改的話,這樣會沒辦法發現
這個選項只建議在個人測試環境啟動,在大型環境、上線環境中則不建議使用

明天我們會看 Ansible 要怎麽和 Terraform 一起使用


上一篇
Day 12 - Ansible Ad-Hoc Mode
下一篇
Day 14 - Terraform & Ansible 混合簡介
系列文
DevOps with Proxmox30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言